package es.ibm.santillana.mdm.packs;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.ccd.common.context.AustinContext;
import com.ibm.json.java.JSONArray;
import com.ibm.json.java.OrderedJSONObject;
import com.ibm.pim.attribute.AttributeDefinition;
import com.ibm.pim.attribute.AttributeInstance;
import com.ibm.pim.catalog.Catalog;
import com.ibm.pim.catalog.CatalogManager;
import com.ibm.pim.catalog.item.Item;
import com.ibm.pim.collaboration.CollaborationAreaManager;
import com.ibm.pim.collaboration.CollaborationItem;
import com.ibm.pim.common.exceptions.PIMSearchException;
import com.ibm.pim.context.Context;
import com.ibm.pim.context.PIMContextFactory;
import com.ibm.pim.hierarchy.Hierarchy;
import com.ibm.pim.hierarchy.HierarchyManager;
import com.ibm.pim.hierarchy.category.Category;
import com.ibm.pim.lookuptable.LookupTable;
import com.ibm.pim.lookuptable.LookupTableEntry;
import com.ibm.pim.lookuptable.LookupTableManager;
import com.ibm.pim.search.SearchQuery;
import com.ibm.pim.search.SearchResultSet;
import com.ibm.pim.spec.SecondarySpec;
import com.ibm.pim.spec.Spec;
import com.ibm.pim.web.framework.dispatcher.AsyncEnabled;
import com.ibm.pim.web.framework.dispatcher.RequestResponseEnabled;

import es.ibm.santillana.mdm.common.util.ConstSantillana;
import es.ibm.santillana.mdm.common.util.ItemUtils;

public class PacksRelacionados implements AsyncEnabled,RequestResponseEnabled{
	
	//private static String sSpecName = "Especificos - CO-Distribuidora Editora Richmond - Material Marketing";
	private static String sSpecName = "Generales";
	HttpServletRequest request;
	HttpServletResponse response;
	
	Context ctxPIM;
	CatalogManager ctgMan;
	Catalog catalogoMaestro;
	HierarchyManager hyMng;
	CollaborationAreaManager caMng;
	
	//send an json array
	String responseContent ="";

	/* (sin Javadoc) 
	 * @see com.ibm.pim.web.framework.dispatcher.AsyncEnabled#getContentType()
	 */
	public String getContentType() {
		
		return JSON;
	}

	/* (sin Javadoc)
	 * @see com.ibm.pim.web.framework.dispatcher.AsyncEnabled#getResponseContent()
	 */
	public String getResponseContent() {
		
		return responseContent;
	}

	/* (sin Javadoc)
	 * @see com.ibm.pim.web.framework.dispatcher.RequestResponseEnabled#setRequest(javax.servlet.http.HttpServletRequest)
	 */
	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}

	/* (sin Javadoc)
	 * @see com.ibm.pim.web.framework.dispatcher.RequestResponseEnabled#setResponse(javax.servlet.http.HttpServletResponse)
	 */
	public void setResponse(HttpServletResponse response) {
		this.response = response;
	}
	
	/**
	 * FlowConfig Method.
	 */
	public void inicializaPacks(){
		ctxPIM = PIMContextFactory.getCurrentContext();
		ctgMan = ctxPIM.getCatalogManager();
		
	}
	
	/**
	 * FlowConfig Method.
	 * @throws IOException 
	 */
	public void obtenerDatos() throws IOException{
		System.out.println("Obtener datos");
		
		AustinContext actx = (AustinContext)request.getSession().getAttribute("ctx");
		AustinContext.setCurrentContext(actx);
		
		String pkArticulo = request.getParameter("pkArticulo");
		String pkSociedad = request.getParameter("pkSociedad");
		String sbWf = request.getParameter("sbWf");
		String sCtgName = request.getParameter("sCtgName");
		System.out.println("Request URI: "+ request.getRequestURI());
		System.out.println("Remote Addr: "+ request.getRemoteAddr());
		System.out.println("PK=" + pkArticulo);
		
		JSONArray aListPack = obtenerInfoPack(pkArticulo, pkSociedad, sbWf, sCtgName);
		
		responseContent = aListPack.serialize(true);		
	}
	
	private Boolean isPack(Item item){
		AttributeInstance attInstancePacks =  item.getAttributeInstance("Especificos - CO-Distribuidora Editora Richmond - Material Marketing/Packs");
		if(attInstancePacks!=null){
			List<AttributeInstance> packs = (List<AttributeInstance>) attInstancePacks.getChildren();
			if(packs!=null && packs.size()>0){
				return true;
			}
		}
		return false;
	}
	
	//http://10.125.143.100:7507/Prueba.wpc?PK=34554135&User=Admin&Padre=true&Titulo=Asignaturas
	
	private String cambiarIP(String pkFinal, String tituloFinal, String urlOriginal){
		int separaIP = urlOriginal.indexOf(".wpc?PK");
		int separa1 = urlOriginal.indexOf("&User=");
		int separa2 = urlOriginal.indexOf("&Padre=");
		return urlOriginal.substring(0, separaIP + 8) + pkFinal + urlOriginal.substring(separa1, separa2) + "&Padre=false&Titulo=" + tituloFinal;
	}
	
	private String createLink(String sPk,String url, String titulo){
		if(catalogoMaestro==null){
			if(ctgMan==null){
				if(ctxPIM==null){
					ctxPIM = PIMContextFactory.getCurrentContext();
				}
				ctgMan = ctxPIM.getCatalogManager();
			}
			catalogoMaestro = ctgMan.getCatalog(ConstSantillana.MAESTRO_ARTICULOS);
		}
		Item item = catalogoMaestro.getItemByPrimaryKey(sPk);
		if(isPack(item)){
			return "<A href=\"" + cambiarIP(sPk,titulo,url) + "\" title=\"Ir al Pack.\">" + sPk + "</A>";
		}
		else{
			return "No";
		}
	}
	
	 
	
	private JSONArray obtenerInfoPack(String sPk, String pkSociedad, String sbWf, String sCtgName){
		System.out.println("Obtener Info Pack");
		System.out.println("pkSociedad " + pkSociedad);
		JSONArray aListPack = new JSONArray();
		
		if(ctxPIM == null){
			ctxPIM = PIMContextFactory.getCurrentContext();
		}
		
		if(ctgMan==null){
			ctgMan = ctxPIM.getCatalogManager();
		}
		
		// Cargar jerarquias
		if(hyMng == null) {
			hyMng = ctxPIM.getHierarchyManager();
		}
		
		if (caMng == null) {
			caMng = ctxPIM.getCollaborationAreaManager();
		}
		
		Hierarchy hySociedades = hyMng.getHierarchy(ConstSantillana.JERARQUIA_PAISES);
		Hierarchy hySociedadTipo = hyMng.getHierarchy(ConstSantillana.JERARQUIA_SOCIEDADES);
		
		
		// Cargar item del catalogo Articulos
		if(catalogoMaestro==null){
			catalogoMaestro = ctgMan.getCatalog(ConstSantillana.MAESTRO_ARTICULOS);
		}
//		Item item = catalogoMaestro.getItemByPrimaryKey(sPk);
		Category catSociedad = hySociedades.getCategoryByPrimaryKey(pkSociedad);
//		
//		//Cojo las categorias de tipologia de la jerarquia sociedad tipo que tienen packs
		Category catZGE0 = hySociedadTipo.getCategoryByPrimaryKey(pkSociedad + "ZGE0");
		Category catSTER = hySociedadTipo.getCategoryByPrimaryKey(pkSociedad + "STER");
		
		
//		//Ahora cojo los specs (solo hay uno en esas categorias)
//		
		Spec specZGE0 = catZGE0.getItemSecondarySpecs().iterator().next();
		Spec specSTER = catSTER.getItemSecondarySpecs().iterator().next();
		
		
//		
//		
		ArrayList <Item> items = new ArrayList<Item>();
		
		String sQueryZGE0 = "select item from catalog('Articulos') "+ 
                "where item['" + specZGE0.getName() + "/Packs/Articulo_Pack'].pk = '"+sPk+"'"; 
		
		System.out.println(sQueryZGE0);
		SearchQuery searchQZGE0 = ctxPIM.createSearchQuery(sQueryZGE0);
		SearchResultSet resSetZGE0 = searchQZGE0.execute();
		System.out.println("Despues de la query");
		System.out.println("Despues de la query: " + resSetZGE0.size());
		while(resSetZGE0.next()){
			try {
				
				items.add(resSetZGE0.getItem(1));
				System.out.println(resSetZGE0.getItem(1).getPrimaryKey());
			} catch (PIMSearchException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		String sQuerySTER = "select item from catalog('Articulos') "+ 
                "where item['"+ specSTER.getName() + "/Packs/Articulo_Pack'].pk = '"+sPk+"'";
		
		System.out.println(sQuerySTER);
		SearchQuery searchQSTER = ctxPIM.createSearchQuery(sQuerySTER);
		SearchResultSet resSetSTER = searchQSTER.execute();
		System.out.println("Despues de la query");
		System.out.println("Despues de la query: " + resSetSTER.size());
		while(resSetSTER.next()){
			try {
				
				items.add(resSetSTER.getItem(1));
				System.out.println(resSetSTER.getItem(1).getPrimaryKey());
			} catch (PIMSearchException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
			
			
			aListPack = obtenerInfoPacks(items, catSociedad);
			return aListPack;
	
		
	}
	
	
	private JSONArray obtenerInfoArticuloPack(CollaborationItem item, Category catSociedad){
		System.out.println("Obtener Info Articulo Pack");
		
		JSONArray aListPack = new JSONArray();
		
		Hierarchy hySociedadesTipo = hyMng.getHierarchy(ConstSantillana.JERARQUIA_SOCIEDADES);
		Hierarchy hyTipologia = hyMng.getHierarchy(ConstSantillana.JERARQUIA_TIPO_DE_PRODUCTO);
	
		System.out.println("voy a formar pack: " + item.getPrimaryKey());

		// Cargar la categoria de la jerarquia tipologia del item
		Category catTipologia = null;
		
		Collection<Category> colCategorias = item.getCategories(); 
		
		for (Category cat : colCategorias) {
			if (cat.getHierarchy().getName().equals(hyTipologia.getName())) {
				catTipologia = cat;
			}
		}
				
		// La PK de SociedadTipo es la concatenacion del PK de Sociedad y Tipologia
		String pkSociedad_Tipo = catSociedad.getPrimaryKey() + catTipologia.getPrimaryKey();
		System.out.println("voy a  catTipologia: " +  catTipologia.getPrimaryKey());
		
		// Cargar categoria de la jerarquia Sociedad-Tipo del PK Sociedad-Tipo
		Category catSociedadTipo = hySociedadesTipo.getCategoryByPrimaryKey(pkSociedad_Tipo);
		System.out.println("voy a catSociedadTipo: " + catSociedadTipo.getPrimaryKey());
		
		// Cargar categoria de la jerarquia sociedad
		
			
		Collection<SecondarySpec> listaSpecsSoci = catSociedad.getItemSecondarySpecs();
		Iterator <SecondarySpec> itSpecsSoci = listaSpecsSoci.iterator();
		String sSpecSociedad = null;
		while (itSpecsSoci.hasNext()) {
			SecondarySpec secSpec = itSpecsSoci.next();
			String name = secSpec.getName();
			if (!name.contains("SEARCH")) {
				sSpecSociedad = name;
			}
		}
		
		Collection<SecondarySpec> listaSpecs = catSociedadTipo.getItemSecondarySpecs();
		Iterator <SecondarySpec> itSpecs = listaSpecs.iterator();
		String sSpecPack = null;
		while (itSpecs.hasNext()) {
			SecondarySpec secSpec = itSpecs.next();
			String name = secSpec.getName();
			if (!name.contains("SEARCH")) {
				sSpecPack = name;
			}
		}
		System.out.println("sSpecSociedad " + sSpecSociedad);
		System.out.println("sSpecPack " + sSpecPack);
		
		
		Spec spc = ctxPIM.getSpecManager().getSpec(sSpecPack);
		List<AttributeDefinition> list = spc.getAttributeDefinitions();
		boolean bPack = false;
		for(AttributeDefinition ad:list) {
			if (ad.getName().contains("Pack")) {
				bPack = true;
			}
		}
		if (!bPack) {
			return aListPack;
		}
		AttributeInstance attInstancePacks =  item.getAttributeInstance(sSpecPack + "/Packs");
		List<AttributeInstance> packs = null;
		if(attInstancePacks!=null) {
			System.out.println("Soy pack");
			packs = (List<AttributeInstance>) attInstancePacks.getChildren();
		
			if(packs!=null && packs.size() > 0) {
				System.out.println("Soy pack");
				for(AttributeInstance attInstanceTemp : packs){
					OrderedJSONObject obj = new OrderedJSONObject();
					
					System.out.println( attInstanceTemp.getPath());
					
					String sPkitemRelacionado = ((Item) item.getAttributeValue(attInstanceTemp.getPath() + "/Articulo_Pack")).getPrimaryKey();					
					Item itemRelacionado = catalogoMaestro.getItemByPrimaryKey(sPkitemRelacionado);
					
					String tituloRelacionado = (String) itemRelacionado.getAttributeValue(sSpecName + "/Titulo_Corto");
					if (tituloRelacionado == null) {
						tituloRelacionado = "-";
					}
					String isbnRelacionado = (String) itemRelacionado.getAttributeValue(sSpecName + "/EAN");
					if(isbnRelacionado == null) isbnRelacionado = "-";
					Integer orden = (Integer) item.getAttributeValue(attInstanceTemp.getPath() + "/Orden");
					Integer unidades = (Integer) item.getAttributeValue(attInstanceTemp.getPath() + "/Unidades");
					String sello = (String) itemRelacionado.getAttributeValue(sSpecName + "/DESC_Sello"); 
					if (sello == null) {
						sello = "-";
					}
					String tipoproducto = (String) itemRelacionado.getAttributeValue(sSpecName + "/DESC_Tipo_Producto"); 
					if (tipoproducto == null) {
						tipoproducto = "-";
					}
					Item itmEstado = (Item) itemRelacionado.getAttributeValue(sSpecSociedad + "/DESC_Estado");
					String estado = null;
					if (itmEstado != null) {
						estado = (String)itmEstado.getAttributeValue("Tabla Global/Valor/es_ES");
						if (estado == null) {
							estado = "-";
						}
					}
					else {
						estado = "-";
					}
					String imagen = ItemUtils.getItemMainImageName(itemRelacionado);
					
					LookupTableManager lkpMan = PIMContextFactory.getCurrentContext().getLookupTableManager();
					LookupTable lkp =  lkpMan.getLookupTable(ConstSantillana.LOOKUP_SYSTEM);
					LookupTableEntry lkpEntry = lkp.getLookupTableEntry("company");
					String sCompany = (String) lkpEntry.getAttributeValue("Code_Value_LTS/Value");
										
					obj.put("pk", sPkitemRelacionado);
					obj.put("clave", sPkitemRelacionado);
					obj.put("imagen", "<img src=\"/suppliers/"+sCompany+"/ctg_files/" + imagen + "\" alt=\"Imagen del articulo.\" width=\"20\" height=\"20\">");
					obj.put("orden", orden.toString());
					obj.put("unidades", unidades);
					obj.put("isbn", isbnRelacionado);
					obj.put("titulo", tituloRelacionado);
					obj.put("sello", sello);
					obj.put("tipoproducto", tipoproducto);
					obj.put("estado", estado);
				
					
					
					JSONArray aListSubpack = obtenerInfoArticuloPack(itemRelacionado, catSociedad);
					if(aListSubpack != null && aListSubpack.size() > 0) {
						obj.put("children", aListSubpack); 
					}
					
					aListPack.add(obj);
				}
			}
		}
		return aListPack;
	}
	
	private JSONArray obtenerInfoPacks (ArrayList <Item> items, Category catSociedad){
		System.out.println("Obtener Info Articulo Pack");
		
		Hierarchy hySociedadesTipo = hyMng.getHierarchy(ConstSantillana.JERARQUIA_SOCIEDADES);
		Hierarchy hyTipologia = hyMng.getHierarchy(ConstSantillana.JERARQUIA_TIPO_DE_PRODUCTO);
	
		

		// Cargar la categoria de la jerarquia tipologia del item
		
				
		// La PK de SociedadTipo es la concatenacion del PK de Sociedad y Tipologia
		
	
		
		// Cargar categoria de la jerarquia Sociedad-Tipo del PK Sociedad-Tipo
		
		
		
		// Cargar categoria de la jerarquia sociedad
		
			
		Collection<SecondarySpec> listaSpecsSoci = catSociedad.getItemSecondarySpecs();
		Iterator <SecondarySpec> itSpecsSoci = listaSpecsSoci.iterator();
		String sSpecSociedad = null;
		while (itSpecsSoci.hasNext()) {
			SecondarySpec secSpec = itSpecsSoci.next();
			String name = secSpec.getName();
			if (!name.contains("SEARCH")) {
				sSpecSociedad = name;
			}
		}
		
		
		System.out.println("sSpecSociedad " + sSpecSociedad);
		
		
		JSONArray aListPack = new JSONArray();
		for(Item item : items){
			OrderedJSONObject obj = new OrderedJSONObject();
			System.out.println("item " + item.getPrimaryKey());
			
			Category catTipologia = item.getCategories(hyTipologia).iterator().next(); 
			String pkSociedad_Tipo = catSociedad.getPrimaryKey() + catTipologia.getPrimaryKey();
			Category catSociedadTipo = hySociedadesTipo.getCategoryByPrimaryKey(pkSociedad_Tipo);
			Collection<SecondarySpec> listaSpecs = catSociedadTipo.getItemSecondarySpecs();
			Iterator <SecondarySpec> itSpecs = listaSpecs.iterator();
			String sSpecPack = null;
			while (itSpecs.hasNext()) {
				SecondarySpec secSpec = itSpecs.next();
				String name = secSpec.getName();
				if (!name.contains("SEARCH")) {
					sSpecPack = name;
				}
			}
			String sPk = item.getPrimaryKey(); 
			String tituloRelacionado = (String) item.getAttributeValue(sSpecName + "/Titulo_Corto");
			if (tituloRelacionado == null) {
				tituloRelacionado = "-";
			}
			String isbnRelacionado = (String) item.getAttributeValue(sSpecName + "/EAN");
			if(isbnRelacionado == null) isbnRelacionado = "-";
			
			String sello = (String) item.getAttributeValue(sSpecName + "/DESC_Sello"); 
			if (sello == null) {
				sello = "-";
			}
			String tipoproducto = (String) item.getAttributeValue(sSpecName + "/DESC_Tipo_Producto"); 
			if (tipoproducto == null) {
				tipoproducto = "-";
			}
			
			System.out.println("sSpecSociedad: " + sSpecSociedad + "/DESC_Estado");
			System.out.println("item: " +item.getPrimaryKey());
			Item itmEstado = (Item) item.getAttributeValue(sSpecSociedad + "/DESC_Estado");
			String estado = null;
			if (itmEstado != null) {
				estado = (String)itmEstado.getAttributeValue("Tabla Global/Valor/es_ES");
				if (estado == null) {
					estado = "-";
				}
			}
			else {
				estado = "-";
			}
			
			String imagen = ItemUtils.getItemMainImageName(item);
			
			
			System.out.println("clave: " + sPk);
			System.out.println("imagen: " + "<img src=\"/suppliers/MDM/ctg_files/" + imagen + "\" alt=\"Imagen del articulo.\" width=\"20\" height=\"20\">");
			System.out.println("isbnRelacionado: " + isbnRelacionado);
			System.out.println("titulo: " + tituloRelacionado);
			System.out.println("sello: " + sello);
			System.out.println("tipoproducto: " + tipoproducto);
			System.out.println("estado: " + estado);
			
			LookupTableManager lkpMan = PIMContextFactory.getCurrentContext().getLookupTableManager();
			LookupTable lkp =  lkpMan.getLookupTable(ConstSantillana.LOOKUP_SYSTEM);
			LookupTableEntry lkpEntry = lkp.getLookupTableEntry("company");
			String sCompany = (String) lkpEntry.getAttributeValue("Code_Value_LTS/Value");
			
			obj.put("pk", sPk);
			obj.put("clave", sPk);
			obj.put("imagen", "<img src=\"/suppliers/"+sCompany+"/ctg_files/" + imagen + "\" alt=\"Imagen del articulo.\" width=\"20\" height=\"20\">");
			
			obj.put("isbn", isbnRelacionado);
			obj.put("titulo", tituloRelacionado);
			obj.put("orden", "3");
			obj.put("sello", sello);
			obj.put("tipoproducto", tipoproducto);
			obj.put("estado", estado);
			
			aListPack.add(obj);
		}
	
		System.out.println("salgooooo");
		return aListPack;
	}
	
	private JSONArray obtenerInfoArticuloPack(Item item, Category catSociedad){
		System.out.println("Obtener Info Articulo Pack");
		
		JSONArray aListPack = new JSONArray();
		
		Hierarchy hySociedadesTipo = hyMng.getHierarchy(ConstSantillana.JERARQUIA_SOCIEDADES);
		Hierarchy hyTipologia = hyMng.getHierarchy(ConstSantillana.JERARQUIA_TIPO_DE_PRODUCTO);
	
		System.out.println("voy a formar pack: " + item.getPrimaryKey());

		// Cargar la categoria de la jerarquia tipologia del item
		Category catTipologia = item.getCategories(hyTipologia).iterator().next(); 
				
		// La PK de SociedadTipo es la concatenacion del PK de Sociedad y Tipologia
		String pkSociedad_Tipo = catSociedad.getPrimaryKey() + catTipologia.getPrimaryKey();
		System.out.println("voy a  catTipologia: " +  catTipologia.getPrimaryKey());
		
		// Cargar categoria de la jerarquia Sociedad-Tipo del PK Sociedad-Tipo
		Category catSociedadTipo = hySociedadesTipo.getCategoryByPrimaryKey(pkSociedad_Tipo);
		System.out.println("voy a catSociedadTipo: " + catSociedadTipo.getPrimaryKey());
		
		// Cargar categoria de la jerarquia sociedad
		
			
		Collection<SecondarySpec> listaSpecsSoci = catSociedad.getItemSecondarySpecs();
		Iterator <SecondarySpec> itSpecsSoci = listaSpecsSoci.iterator();
		String sSpecSociedad = null;
		while (itSpecsSoci.hasNext()) {
			SecondarySpec secSpec = itSpecsSoci.next();
			String name = secSpec.getName();
			if (!name.contains("SEARCH")) {
				sSpecSociedad = name;
			}
		}
		
		Collection<SecondarySpec> listaSpecs = catSociedadTipo.getItemSecondarySpecs();
		Iterator <SecondarySpec> itSpecs = listaSpecs.iterator();
		String sSpecPack = null;
		while (itSpecs.hasNext()) {
			SecondarySpec secSpec = itSpecs.next();
			String name = secSpec.getName();
			if (!name.contains("SEARCH")) {
				sSpecPack = name;
			}
		}
		System.out.println("sSpecSociedad " + sSpecSociedad);
		System.out.println("sSpecPack " + sSpecPack);
		
		
		Spec spc = ctxPIM.getSpecManager().getSpec(sSpecPack);
		List<AttributeDefinition> list = spc.getAttributeDefinitions();
		boolean bPack = false;
		for(AttributeDefinition ad:list) {
			if (ad.getName().contains("Pack")) {
				bPack = true;
			}
		}
		if (!bPack) {
			return aListPack;
		}
		AttributeInstance attInstancePacks =  item.getAttributeInstance(sSpecPack + "/Packs");
		List<AttributeInstance> packs = null;
		if(attInstancePacks!=null) {
			System.out.println("Soy pack");
			packs = (List<AttributeInstance>) attInstancePacks.getChildren();
		
			if(packs!=null && packs.size() > 0) {
				System.out.println("Soy pack");
				for(AttributeInstance attInstanceTemp : packs){
					OrderedJSONObject obj = new OrderedJSONObject();
					
					System.out.println( attInstanceTemp.getPath());
					
					String sPkitemRelacionado = ((Item) item.getAttributeValue(attInstanceTemp.getPath() + "/Articulo_Pack")).getPrimaryKey();					
					Item itemRelacionado = catalogoMaestro.getItemByPrimaryKey(sPkitemRelacionado);
					
					String tituloRelacionado = (String) itemRelacionado.getAttributeValue(sSpecName + "/Titulo_Corto");
					if (tituloRelacionado == null) {
						tituloRelacionado = "-";
					}
					String isbnRelacionado = (String) itemRelacionado.getAttributeValue(sSpecName + "/EAN");
					if(isbnRelacionado == null) isbnRelacionado = "-";
					Integer orden = (Integer) item.getAttributeValue(attInstanceTemp.getPath() + "/Orden");
					Integer unidades = (Integer) item.getAttributeValue(attInstanceTemp.getPath() + "/Unidades");
					String sello = (String) itemRelacionado.getAttributeValue(sSpecName + "/DESC_Sello"); 
					if (sello == null) {
						sello = "-";
					}
					String tipoproducto = (String) itemRelacionado.getAttributeValue(sSpecName + "/DESC_Tipo_Producto"); 
					if (tipoproducto == null) {
						tipoproducto = "-";
					}
					Item itmEstado = (Item) itemRelacionado.getAttributeValue(sSpecSociedad + "/DESC_Estado");
					String estado = null;
					if (itmEstado != null) {
						estado = (String)itmEstado.getAttributeValue("Tabla Global/Valor/es_ES");
						if (estado == null) {
							estado = "-";
						}
					}
					else {
						estado = "-";
					}
					
					String imagen = ItemUtils.getItemMainImageName(itemRelacionado);
					
					
					obj.put("pk", sPkitemRelacionado);
					obj.put("clave", sPkitemRelacionado);
					obj.put("imagen", "<img src=\"/suppliers/MDM/ctg_files/" + imagen + "\" alt=\"Imagen del articulo.\" width=\"20\" height=\"20\">");
					obj.put("orden", orden.toString());
					obj.put("unidades", unidades);
					obj.put("isbn", isbnRelacionado);
					obj.put("titulo", tituloRelacionado);
					obj.put("sello", sello);
					obj.put("tipoproducto", tipoproducto);
					obj.put("estado", estado);
				
					
					
					JSONArray aListSubpack = obtenerInfoArticuloPack(itemRelacionado, catSociedad);
					if(aListSubpack != null && aListSubpack.size() > 0) {
						obj.put("children", aListSubpack); 
					}
					
					aListPack.add(obj);
				}
			}
		}
		return aListPack;
	}
}
